// import axios from 'axios'
// import {Message} from 'element-ui'
import store from '@/store'
import {getToken} from '@/request/token'

const service = axios.create({
  baseURL: process.env.BASE_API,
  timeout: 10000
})

//request拦截器
// 每次请求都要带token，如果每次都手动添加会很麻烦，使用request拦截器自动添加token
service.interceptors.request.use(config => {
  let tokenId = getToken()
  if (tokenId) {
    config.headers['Authorization'] = tokenId
  }
  return config
}, error => {

  Promise.reject(error)
})

// respone拦截器
// 在接收到响应后进行一些操作，在服务器返回登录状态失效，需要重新登录的时候，跳转到登录页。就是在请
// 求结果返回后，先不直接导出，而是先对响应码等等进行处理，处理好后再导出给页面，如果将这个对响应码的处
// 理过程抽出来，就成了所谓的响应拦截器
service.interceptors.response.use(
  response => {

    //全局统一处理 Session超时
    // 用户登录时间过长，没有进行操作。进而造成了session的超时之后自行销毁。
    // 但是如果没做session超时处理的话就会报出“未将对象引用到实例”的错误。
    if (response.headers['session_time_out'] == 'timeout') {
      store.dispatch('fedLogOut')
    }

    const res = response.data;

    //0 为成功状态
    if (res.code !== 200) {

      //90001 Session超时
      if (res.code === 90001) {
        return Promise.reject('error');
      }

      //90002 用户未登录
      if (res.code === 90002) {

        this.$message({
          type: 'warning',
          showClose: true,
          message: '未登录或登录超时，请重新登录哦'
        })

        return Promise.reject('error');
      }

      //70001 权限认证错误
      if (res.code === 70001) {
        this.$message({
          type: 'warning',
          showClose: true,
          message: '你没有权限访问哦'
        })
        return Promise.reject('error');
      }

      return Promise.reject(res.msg);
    } else {
      return response.data;
    }
  },
  error => {
    this.$message({
      type: 'warning',
      showClose: true,
      message: '连接超时'
    })
    return Promise.reject('error')
  })

export default service
